package com.zut.view;

import com.zut.entity.Classes;
import com.zut.service.ClassesService;
import com.zut.service.TeacherService;
import com.zut.service.impl.ClassesServiceImpl;
import com.zut.service.impl.TeacherServiceImpl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.Stream;

/**
 * 班级信息操作界面
 */
public class ClassesView {

    //扫描器
    private Scanner sc = new Scanner(System.in);

    //创建一个班级业务对象
    private ClassesService clsService = new ClassesServiceImpl();

    //创建一个教师的业务对象
    private TeacherService ts = new TeacherServiceImpl();


    /**
     * 班级操作的主菜单
     */
    public void classesMainPage(){

        while (true){
            System.out.println("****************班级信息管理*********************");
            System.out.println("请选择功能:1、添加班级 2、查询所有班级 3、根据班级名称模糊查询 4、修改班级名称 5、删除班级 6、添加班级授课教师 0、退出班级操作");
            //接收选项
            String num = sc.nextLine();

            //判断功能
            switch (num){

                case "1": //添加班级界面
                    addClassesPage();
                    break;

                case "2": //查询界面
                    showClassesPage();
                    break;

                case "3": //模糊查询
                    showClassesByNamePage();
                    break;

                case "4"://修改界面
                    updateClassesNamePage();
                    break;

                case "5":
                    deleteClassesPage();
                    break;

                case "6":
                    addClassesTeacherPage();
                    break;

                case "0":
                    return;

                default:
                    System.out.println("该功能未开放，请重新选择");
            }


        }



    }

    /**
     * 班级添加任课教师
     */
    private void addClassesTeacherPage() {
        System.out.println("*******************选择任课教师*********************");

        //选择班级
        showClassesPage();
        System.out.println("请选择班级编号");
        String classId = sc.nextLine();

        //展示该班，没有被教授的课程，的教师信息
        List<Map<String,Object>> list = ts.findTeachers(classId);
        if(list.size()==0){
            System.out.println("该班级暂时不能添加教师");
            return;
        }

        //创建一个新的list集合，直接保存所有可选教师的编号
        List<String> tids = new ArrayList<>();

        for (Map<String,Object> map:list) {
            System.out.println("编号:"+map.get("id")+"\t姓名:"+map.get("name")+"\t 教授课程:"+map.get("cname"));
            tids.add((String) map.get("id"));
        }

        while(true) {
            //输入教师编号
            System.out.println("请选择教师编号:");
            String tid = sc.nextLine();

            //确认输入的是可选择的教师编号
            boolean bl = tids.contains(tid);
            if (bl) { //正确

                //调用业务方法，添加教师和班级的业务
                clsService.addClassTeacher(tid,classId);
                //提示添加结果
                System.out.println("添加成功");
                return;
            }else{
                System.out.println("教师编号不正确，请重新选择");
            }

        }

    }

    /**
     * 删除
     */
    private void deleteClassesPage() {
        System.out.println("******************删除班级**********************");
        showClassesPage();
        System.out.println("请输入要删除的班级编号:");
        String classId = sc.nextLine();

        //调用业务方法
        boolean bl = clsService.deleteClassesById(classId);

        System.out.println(bl?"删除成功":"班级不存在");

    }

    /**
     * 修改班级名称
     */
    private void updateClassesNamePage() {
        System.out.println("************修改班级名称*******************");

        //调用全部查询的功能，进行信息的展示
        showClassesPage();

        //请输入班级编号
        System.out.println("请输入班级编号");
        String classId = sc.nextLine();

        System.out.println("请输入新的班级名称:");
        String newClassName = sc.nextLine();

        //使用业务对象调用业务方法
        int status = clsService.updateClassNameById(classId,newClassName);

        //根据业务结果进行提示
        switch (status){
            case 1:
                System.out.println("修改成功");
                break;
            case 0:
                System.out.println("班级编号不正确");
                break;

            case 2:
                System.out.println("班级已存在");
                break;
        }


    }

    /**
     * 模糊查询
     */
    private void showClassesByNamePage() {
        System.out.println("******************根据班级名称模糊查询******************");
        System.out.println("请输入班级名称:");

        //接收班级名称
        String className = sc.nextLine();

        //通过业务对象调用业务方法
        List<Classes> list = clsService.findClassesByClassName(className);

        //根据业务处理结果进行展示
        if(list.size()==0){
            System.out.println("未查询到班级");
        }else{
            Stream<Classes> stream = list.stream();
            stream.forEach(t->System.out.println("班级编号:"+t.getId()+"\t班级名称:"+t.getName()));
        }



    }

    /**
     * 展示所有班级
     */
    private void showClassesPage() {
        System.out.println("班级情况如下:");

        //调用业务方法
        List<Classes> list = clsService.findAllClasses();

        //根据业务结果提示
        if(list.size()==0){
            System.out.println("暂无班级信息，请先添加班级");
        }else{
            for (Classes classes : list) {
                System.out.println("班级编号:"+classes.getId()+"\t班级名称:"+classes.getName());
            }
        }

    }

    /**
     * 添加班级界面
     */
    private void addClassesPage() {
        System.out.println("*********添加班级**************");
        System.out.println("请输入新的班级名称:");
        String classesName = sc.nextLine();

        //调用班级业务类中的添加班级业务方法
        boolean bl = clsService.addClasses(classesName);

        //根据业务结果进行提示
        if(bl){
            System.out.println("新增班级成功");
        }else{
            System.out.println("该班级已经存在");
        }
    }

}
